// pages/profile/profile.js
import { userApi, uploadApi } from '../../services/api';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    currentStep: 0,
    steps: ['基本信息', '详细信息', '照片上传'],
    formData: {
      nickname: '',
      age: '',
      height: '',
      education: '',
      occupation: '',
      location: '',
      hobbies: '',
      selfIntro: '',
      requirements: '',
      photos: []
    },
    educationOptions: ['高中', '专科', '本科', '硕士', '博士'],
    maxPhotos: 3,
    isEdit: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 获取当前登录用户信息并回填
    this.initUserInfo();

    if (options.type === 'edit') {
      this.setData({ isEdit: true });
      this.loadProfile();
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 处理输入框变化
  handleInput(e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    
    // 如果是昵称字段，进行特殊处理
    if (field === 'nickname') {
      console.log('昵称输入：', value);
      this.setData({
        'formData.nickname': value
      });
      console.log('更新后的昵称：', this.data.formData.nickname);
    } else {
      this.setData({
        [`formData.${field}`]: value
      });
    }
  },

  // 选择教育程度
  handleEducationChange(e) {
    this.setData({
      'formData.education': this.data.educationOptions[e.detail.value]
    });
  },

  // 上传照片
  async handleUploadPhoto() {
    if (this.data.formData.photos.length >= this.data.maxPhotos) {
      wx.showToast({
        title: '最多上传3张照片',
        icon: 'none'
      });
      return;
    }

    try {
      const res = await wx.chooseImage({
        count: 1,
        sizeType: ['compressed'],
        sourceType: ['album', 'camera']
      });

      wx.showLoading({ title: '上传中...' });
      const uploadResult = await uploadApi.uploadImage(res.tempFilePaths[0]);
      
      console.log('上传结果：', uploadResult);

      // 确保photos数组存在
      const photos = this.data.formData.photos || [];
      
      // 使用完整的图片URL
      const newPhotos = photos.concat(uploadResult.url);
      
      this.setData({
        'formData.photos': newPhotos
      });

      console.log('当前照片列表：', this.data.formData.photos);
      
      wx.hideLoading();
    } catch (err) {
      console.error('上传照片失败', err);
      wx.showToast({
        title: err.message || '上传失败，请重试',
        icon: 'none'
      });
    }
  },

  // 显示照片
  handlePreviewPhoto(e) {
    const { url } = e.currentTarget.dataset;
    wx.previewImage({
      current: url,
      urls: this.data.formData.photos
    });
  },

  // 删除照片
  handleDeletePhoto(e) {
    const { index } = e.currentTarget.dataset;
    const photos = this.data.formData.photos.filter((_, i) => i !== index);
    this.setData({
      'formData.photos': photos
    });
  },

  // 下一步
  handleNext() {
    if (!this.validateCurrentStep()) {
      return;
    }

    if (this.data.currentStep < 2) {
      this.setData({
        currentStep: this.data.currentStep + 1
      });
    } else {
      this.handleSubmit();
    }
  },

  // 上一步
  handlePrev() {
    if (this.data.currentStep > 0) {
      this.setData({
        currentStep: this.data.currentStep - 1
      });
    }
  },

  // 验证当前步骤
  validateCurrentStep() {
    const { currentStep, formData } = this.data;
    
    if (currentStep === 0) {
      // 基本信息验证
      if (!formData.avatarUrl) {
        wx.showToast({
          title: '请选择头像',
          icon: 'none'
        });
        return false;
      }
      if (!formData.gender) {
        wx.showToast({
          title: '请选择性别',
          icon: 'none'
        });
        return false;
      }
      if (!formData.nickname) {
        wx.showToast({
          title: '请输入昵称',
          icon: 'none'
        });
        return false;
      }
      if (!formData.age || !formData.height || !formData.education) {
        wx.showToast({
          title: '请填写完整基本信息',
          icon: 'none'
        });
        return false;
      }
    } else if (currentStep === 1) {
      // 详细信息验证
      if (!formData.occupation || !formData.location || !formData.selfIntro) {
        wx.showToast({
          title: '请填写完整详细信息',
          icon: 'none'
        });
        return false;
      }
    } else if (currentStep === 2) {
      // 照片验证
      if (formData.photos.length === 0) {
        wx.showToast({
          title: '请至少上传一张照片',
          icon: 'none'
        });
        return false;
      }
    }
    
    return true;
  },

  // 提交表单前验证
  validateForm() {
    const { formData } = this.data;
    if (!formData.nickname || !formData.age || !formData.height) {
      wx.showToast({
        title: '请填写完整基本信息',
        icon: 'none'
      });
      return false;
    }
    return true;
  },

  // 提交表单
  async handleSubmit() {
    if (!this.validateForm()) return;

    try {
      // 再次确认formData中的昵称
      console.log('提交前的表单数据：', this.data.formData);

      // 构建提交数据
      const submitData = {
        ...this.data.formData,
        // 确保使用最新的昵称
        nickname: this.data.formData.nickname,
        avatarUrl: this.data.formData.avatarUrl,
        gender: parseInt(this.data.formData.gender) || 0
      };

      console.log('最终提交的数据：', submitData);

      const result = await userApi.submitProfile(submitData);
      console.log('提交结果：', result);
      
      // 更新本地存储的用户信息
      const userInfo = wx.getStorageSync('userInfo');
      wx.setStorageSync('userInfo', {
        ...userInfo,
        nickName: submitData.nickname,  // 更新本地存储的昵称
        avatarUrl: submitData.avatarUrl,
        gender: submitData.gender
      });

      wx.showToast({
        title: '提交成功',
        icon: 'success'
      });
      
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    } catch (err) {
      console.error('提交失败', err);
      wx.showToast({
        title: err.message || '提交失败，请重试',
        icon: 'none'
      });
    }
  },

  // 新增：初始化用户信息
  async initUserInfo() {
    try {
      const userInfo = wx.getStorageSync('userInfo');
      if (!userInfo) return;

      const profile = await userApi.getProfile();
      console.log('获取到的用户资料：', profile);

      if (profile) {
        // 根据后端返回的数据结构重构formData
        const formData = {
          // 基本信息
          nickname: profile.nickname || '',
          avatarUrl: profile.userInfo?.avatarUrl || '',  // 从userInfo中获取头像
          gender: profile.userInfo?.gender || 0,         // 从userInfo中获取性别
          age: profile.age || '',
          height: profile.height || '',
          education: profile.education || '',

          // 详细信息
          occupation: profile.occupation || '',
          location: profile.location || '',
          hobbies: profile.hobbies || '',
          selfIntro: profile.selfIntro || '',
          requirements: profile.requirements || '',

          // 照片信息
          photos: profile.photos || []
        };

        console.log('回填的表单数据：', formData);
        this.setData({ formData });
      }

    } catch (err) {
      console.error('初始化用户信息失败', err);
      // 即使获取资料失败，也至少回填基本用户信息
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({
          'formData.avatarUrl': userInfo.avatarUrl || '',
          'formData.nickname': userInfo.nickName || '',
          'formData.gender': userInfo.gender || 0
        });
      }
    }
  },

  // 修改：加载资料时合并用户信息
  async loadProfile() {
    try {
      wx.showLoading({ title: '加载中...' });
      const profile = await userApi.getProfile();
      
      // 根据后端返回的数据结构重构formData
      const formData = {
        nickname: profile.nickname || '',
        avatarUrl: profile.userInfo?.avatarUrl || '',  // 从userInfo中获取头像
        gender: profile.userInfo?.gender || 0,         // 从userInfo中获取性别
        age: profile.age || '',
        height: profile.height || '',
        education: profile.education || '',
        occupation: profile.occupation || '',
        location: profile.location || '',
        hobbies: profile.hobbies || '',
        selfIntro: profile.selfIntro || '',
        requirements: profile.requirements || '',
        photos: profile.photos || []
      };

      console.log('编辑模式加载的资料：', formData);

      this.setData({ formData });
      wx.hideLoading();
    } catch (err) {
      console.error('获取资料失败', err);
      wx.showToast({
        title: err.message || '获取资料失败',
        icon: 'none'
      });
    }
  },

  // 处理头像上传
  async handleUploadAvatar() {
    try {
      const res = await wx.chooseImage({
        count: 1,
        sizeType: ['compressed'],
        sourceType: ['album', 'camera']
      });

      wx.showLoading({ title: '上传中...' });
      const uploadResult = await uploadApi.uploadImage(res.tempFilePaths[0]);
      
      console.log('头像上传结果：', uploadResult);

      this.setData({
        'formData.avatarUrl': uploadResult.url
      });

      wx.hideLoading();
    } catch (err) {
      console.error('上传头像失败', err);
      wx.showToast({
        title: '上传失败，请重试',
        icon: 'none'
      });
    }
  },

  // 处理性别选择
  handleGenderChange(e) {
    const gender = parseInt(e.detail.value);
    console.log('选择的性别：', gender);
    this.setData({
      'formData.gender': gender
    });
  },

  // 处理头像选择
  onChooseAvatar(e) {
    console.log('选择头像返回数据：', e.detail);
    const { avatarUrl } = e.detail;
    
    this.setData({
      'formData.avatarUrl': avatarUrl
    });
    console.log('更新后的表单数据：', this.data.formData);
  },

  // 处理昵称审核
  onNicknameReview(e) {
    console.log('昵称审核结果：', e.detail);
    // 如果昵称通过审核，立即更新formData
    if (e.detail && e.detail.nickname) {
      // 直接更新formData中的nickname
      this.setData({
        'formData.nickname': e.detail.nickname
      }, () => {
        // 打印更新后的formData，确认昵称已更新
        console.log('昵称已更新，当前formData：', this.data.formData);
      });
    }
  }
})